package middleware

import (
	"errors"
	"exam_go/service"

	"github.com/gin-contrib/sessions"
	"github.com/gin-gonic/gin"
)

func IsLogin(c *gin.Context) {
	session := sessions.Default(c)
	if session.Get("userId") == nil {
		c.Error(&gin.Error{
			Err:  errors.New("未登录"),
			Type: service.AuthErr,
		})
		c.Abort()
		return
	}
	c.Next()
}

func IsNotLogin(c *gin.Context) {
	session := sessions.Default(c)
	if session.Get("userId") != nil {
		c.Error(&gin.Error{
			Err:  errors.New("请勿重复登陆,如需登录其他账号请先登出"),
			Type: service.AuthErr,
		})
		c.Abort()
		return
	}
	c.Next()
}

func IsAdmin(c *gin.Context) {
	session := sessions.Default(c)

	// 检查 isAdmin 是否存在以及是否为 bool 类型
	isAdmin, ok := session.Get("isAdmin").(bool)
	if !ok || !isAdmin {
		// 如果 isAdmin 不存在或不是管理员，返回错误并终止请求
		c.Error(&gin.Error{
			Err:  errors.New("不是管理员"),
			Type: service.AuthErr,
		})
		c.Abort()
		return
	}

	// 如果是管理员，继续后续逻辑
	c.Next()
}
